package infos

import (
	"github.com/gin-gonic/gin"
	"github.com/pkg/errors"
	"gogs.xiaoyuanjijiehao.com/antlinker/antcms/core/columnd"
	"gogs.xiaoyuanjijiehao.com/antlinker/antcms/core/common"
	"gogs.xiaoyuanjijiehao.com/antlinker/antcms/core/infod"
)

type respColumnInfo struct {
	ParentID     string             `json:"parent_id"`            // 上级栏目
	Name         string             `json:"name"`                 // 栏目名称
	ShortName    string             `json:"short_name,omitempty"` // 栏目短名称
	Kind         columnd.ColumnKind `json:"kind"`                 // - 栏目类型（1 系统栏目 2 专题栏目 3 交流互动）
	Owner        string             `json:"owner,omitempty"`      //- 所属用户
	Org          string             `json:"org,omitempty"`        //- 所属组织
	Icon         []string           `json:"icon,omitempty"`       // - 栏目标志
	Page         string             `json:"page,omitempty"`       // - 栏目封面
	Banner       string             `json:"banner,omitempty"`     //- 栏目旗帜
	Desc         string             `json:"desc,omitempty"`       //- 栏目介绍
	PubNum       int                `json:"pub_num"`              // 信息发布数量
	IsColReply   int                `json:"is_col_reply"`         // 是否开启栏目评论 0 不开启 1 开启
	IsReply      int                `json:"is_reply"`             // 是否开启信息评论 0 不开启 1 开启
	IsInfoChk    int                `json:"is_info_chk"`          // 是否开启信息审核 0 不开启 1 开启
	IsChk        int                `json:"is_chk"`               // 发评论审核模式  0 不需要审核  1 需要所有者审核 2 需要组织审核 3 需要平台审核
	AllowIntCode []string           `json:"allow_int_code"`       // 允许的互动模式 对应InteractionTypeDesc中的Code
	IsSubmit     int                `json:"is_submit"`            // 是否允许投稿 0 不开启 1 开启
	IsPublic     int                `json:"is_public"`            // 是否允许公开 0 不开启 1 开启
	InfoMode     int                `json:"info_mode"`            // 信息编辑模式 -1 禁止发文章 0 多篇文章模式 1 单篇文章模式
	InfoID       string             `json:"info_id,omitempty"`    // 单文章模式时直接读取出编号
	Infourl      string             `json:"infourl,omitempty"`    // 栏目信息对应的明细页面
}

// 分页获取信息列表
func (c infoCtrl) getColumnInfoList(ctx *gin.Context) {

	page := c.GetPageInfo(ctx, common.PageModeID)
	dctx := c.DDDContext(ctx)
	sch := c.geInfoSearch(ctx)
	if cid := ctx.Param("columnid"); cid != "" {
		sch.ColumnID = cid
	} else {
		c.ErrBadRequest(ctx, 2, "没有设置栏目编号")
		return
	}
	page.Mode = 1
	col, err := c.car.GetColumn(dctx, sch.ColumnID)
	if err != nil {
		c.ErrServerError(ctx, 3, "获取指定栏目失败", errors.Wrapf(err, "查询栏目(%v)失败.", sch.ColumnID))
		return
	}
	if col == nil {
		c.ErrNotFound(ctx, 4, "找不到指定的栏目")
		return
	}
	switch col.InfoMode {
	case columnd.InfoModeSingle:
		page.Current = 1
		page.Direct = 0
		page.PageSize = 1
		page.Desc = true
		page.PageID = ""
	default:
	}

	pr, cs, err := c.iar.QueryPage(dctx, sch, page)
	if err != nil {
		c.ErrServerError(ctx, 2, "查找信息列表失败", errors.Wrap(err, "查找信息列表失败"))
		return
	}
	respInfos := make([]interface{}, 0, len(cs))
	for _, v := range cs {
		respInfos = append(respInfos, adapterC2Resp(ctx, &v, col))
	}
	c.SuccessPage(ctx, page, pr, respInfos)
}

// 获取栏目信息
func (c infoCtrl) getColumn(ctx *gin.Context) {

	dctx := c.DDDContext(ctx)
	cid := ctx.Param("columnid")
	if cid == "" {
		c.ErrBadRequest(ctx, 1, "没有设置栏目编号")
		return
	}
	col, err := c.car.GetColumn(dctx, cid)
	if err != nil {
		c.ErrServerError(ctx, 2, "获取指定栏目失败", errors.Wrapf(err, "查询栏目(%v)失败.", cid))
		return
	}
	if col == nil {
		c.ErrBadRequest(ctx, 10, "找不到栏目")
		return
	}
	resp := respColumnInfo{
		ParentID:     col.ParentID,
		Name:         col.Name,
		ShortName:    col.ShortName,
		Kind:         col.Kind,
		Owner:        col.Owner,
		Org:          col.Org,
		Icon:         col.Icon,
		Page:         col.Page,
		Banner:       col.Banner,
		Desc:         col.Desc,
		PubNum:       col.PubNum,
		IsColReply:   col.IsColReply,
		IsReply:      col.IsReply,
		IsInfoChk:    col.IsInfoChk,
		IsChk:        col.IsChk,
		Infourl:      col.Infourl,
		AllowIntCode: col.AllowIntCode,
		IsSubmit:     col.IsSubmit,
		IsPublic:     col.IsPublic,
		InfoMode:     col.InfoMode,
	}
	if resp.InfoMode != columnd.InfoModeSingle {

		c.Success(ctx, resp)
		return
	}
	page := common.PageInfo{
		Current:  1,
		Direct:   0,
		PageSize: 1,
		Desc:     true,
		PageID:   "",
	}
	sch := infod.InfoSearch{
		ColumnID: cid,
		UID:      col.Owner,
		OrgID:    col.Org,
		Status:   []infod.IStatus{infod.IStatusPublished},
	}
	_, cs, err := c.iar.QueryPage(dctx, sch, page)
	if err != nil {
		c.ErrServerError(ctx, 2, "查找信息列表失败", errors.Wrap(err, "查找信息列表失败"))
		return
	}
	//respInfos := make([]interface{}, 0, len(cs))
	for _, v := range cs {
		//respInfos = append(respInfos, adapterC2Resp(ctx, &v, col))
		resp.InfoID = v.InfoID
		break
	}
	c.Success(ctx, resp)
	return

}
